package cn.com.wxd.util.website;

import java.util.ArrayList;
import java.util.List;

import cn.com.wxd.entity.website.CatalogInfo;
import cn.com.wxd.common.JsonUtil;

/**
 * Title:栏目树生成类
 * Description:组织生成一个栏目树
 * 
 * Company: Amumu管理平台
 * Copyright: Copyright (c) 2015
 * All right reserved.
 * Created time: 2015年10月22日 下午5:02:59
 *
 * @author WangXuDong
 * @version 1.0
 */
public class CatalogTree {

	private List<CatalogInfo> allcatalog = null;
	public CatalogTree(List<CatalogInfo> catalogs){
		this.allcatalog = catalogs;
	}
	/**
	 * 获取某个栏目下的直接子栏目
	 * @param caid 栏目ID
	 * @return 子栏目
	 */
	public List<CatalogTreeEntity> getSubCatalogs(Integer caid){
		List<CatalogTreeEntity> ctes = new ArrayList<CatalogTreeEntity>();
		for (int i= 0; i < allcatalog.size(); i++) {
			if(allcatalog.get(i)!=null){
				if(allcatalog.get(i).getParentId()==null&&caid==null){					
					CatalogTreeEntity cte = new CatalogTreeEntity();
					cte.setId(allcatalog.get(i).getId());
					cte.setName(allcatalog.get(i).getName());
					ctes.add(cte);
				}else if(allcatalog.get(i).getParentId()==null){
					if(caid.equals(allcatalog.get(i).getParentId())){
						CatalogTreeEntity cte = new CatalogTreeEntity();
						cte.setId(allcatalog.get(i).getId());
						cte.setName(allcatalog.get(i).getName());
						ctes.add(cte);
					}
				}else{
					if(allcatalog.get(i).getParentId().equals(caid)){
						CatalogTreeEntity cte = new CatalogTreeEntity();
						cte.setId(allcatalog.get(i).getId());
						cte.setName(allcatalog.get(i).getName());
						ctes.add(cte);
					}
				}
			}
		}
		return ctes;
	}
	/**
	 *  填充栏目树对象
	 * @param ce 栏目树的根节点栏目对象（没有子栏目）
	 * @param level 栏目从根栏目第level开始建树
	 * @return 返回栏目树对象（含子栏目）
	 */
	private CatalogTreeEntity fillCataTree(CatalogTreeEntity ce){
		List<CatalogTreeEntity> ctes = getSubCatalogs(ce.getId());
		if(ctes!=null && ctes.size()>0){  //ce还有子栏目;
			ce.setChilds(ctes);
			for (int i = 0; i < ctes.size(); i++) {
				ctes.get(i).setLevel(ce.getLevel()+1);
				fillCataTree(ctes.get(i));	
			}	
		}
		return ce;
	}
	/**
	 * 获取填充栏目树对象,根栏目为空的栏目
	 * @return 填充好的栏目树
	 */
	public CatalogTreeEntity getCatalogTree(){
		return fillCataTree(new CatalogTreeEntity());
	}
	/**
	 * 遍历一个栏目树生成
	 * @param cte
	 * @return
	 */
	private String traverseCataTree(CatalogTreeEntity cte){
		String sub = "";
		if(cte!=null){
			//setDomParam(cte);//给标签设置参数
			if(cte.getChilds()!=null){
				for (int i = 0; i < cte.getChilds().size(); i++) {
					CatalogTreeEntity recte;
					recte = cte.getChilds().get(i);
					boolean isend = false;//是否是最底层的栏目
					if(recte.getChilds()==null||recte.getChilds().size()<=0){
						isend = true;
					}
					if(recte!=null){

						sub += "<li>\n\t"+"<span level=\""+recte.getLevel()+"\" isend=\""+isend+"\" id=\""+recte.getId()+"\">"
								+"<i class=\"glyphicon glyphicon-chevron-right\"></i>"
								+recte.getName()+"</span>"+"<ul style=\"-webkit-padding-start: 40px\">";

						sub = sub+traverseCataTree(recte)
								+"</ul>"
								+"</li>";
					}	
				}		
			}
		}
		return sub;
	}
	/**
	 * 返回所有栏目的DOM对象
	 * @return 返回所有栏目的DOM对象
	 */
	public String getCatalogTreeHTML(){		
		return traverseCataTree(fillCataTree(new CatalogTreeEntity()));
	}
	/**
	 * 返回指定栏目的栏目树对象
	 * @param cte 指定的根栏目
	 * @return 栏目树对象
	 */
	public String getCatalogTreeHTML(CatalogTreeEntity cte){
		return traverseCataTree(fillCataTree(cte));
	}
	/**
	 * 返回指定栏目的栏目树对象JSON
	 * @return
	 */
	public String getCatalogTreeJSON(){
		String json = JsonUtil.objectToJson(fillCataTree(new CatalogTreeEntity()));
		return json;
	}
}
